<?php
class Juridica extends Pessoa{
	protected $_name = 'pessoa_juridica';
    protected $_primary = 'id_juridica';

    public function getNomeFormatado(){
    	return $this->nomeFormatado;
    }
    
    public function __construct($cadastroConfiavel=true, $listaFisica=false){
    	$this->cadastroConfiavel = $cadastroConfiavel;
		parent::__construct();
    	$this->id_juridica 			= NULL;
		$this->ds_cnpj 				= NULL;
		$this->ds_razao_social 		= NULL;
		$this->ds_insc_estadual		= NULL;
		$this->ds_cadastur 			= NULL;
		$this->nm_outro_documento   = NULL;
		$this->ds_outro_documento   = NULL;
		$this->ds_site   			= NULL;
		$this->id_atuacao   		= NULL;
		$this->funcionarios[]		= null;
		$this->listaFisica			= $listaFisica;
    }

    public function load($id){
    	parent::load($id);
    	$this->consistir();
    	$db = Zend_Registry::get('db');
		$sql= 'select id_juridica,
					  ds_cnpj,
					  ds_razao_social,
					  ds_insc_estadual,
					  ds_cadastur,
					  nm_outro_documento,
					  ds_outro_documento,
					  ds_site,
					  id_atuacao
			     from '.$this->_name.'
			    where id_juridica='.$id;
		$row = $db->query($sql)->fetch();
    	$this->id_juridica 			= (int) $row["id_juridica"];
		$this->ds_cnpj 				= $row["ds_cnpj"];
		$this->ds_razao_social 		= $row["ds_razao_social"];
		$this->ds_insc_estadual		= $row["ds_insc_estadual"];
		$this->ds_cadastur 			= $row["ds_cadastur"];
		$this->nm_outro_documento   = $row["nm_outro_documento"];
		$this->ds_outro_documento   = $row["ds_outro_documento"];
		$this->ds_site   			= $row["ds_site"];
		$this->id_atuacao   		= $row["id_atuacao"];
		if ($this->listaFisica==true && $this->id_juridica!=0){
			$this->loadFuncionarios();
		}
		$this->setNomeFormatado($this->ds_nome, $this->ds_razao_social);
    }

    public function salvar(){
    	parent::salvar();
    	$this->consistir();
    	$filter = new Zend_Filter_StringToLower(array('encoding' => 'UTF-8'));
    	$dados = array('id_juridica'		=>$this->id_pessoa,
				 	   'ds_cnpj'			=>StringFormat::apenasCodigo($this->ds_cnpj),
					   'ds_razao_social'	=>$this->ds_razao_social,
					   'ds_insc_estadual'	=>$this->ds_insc_estadual,
    				   'ds_cadastur'		=>StringFormat::apenasCodigo($this->ds_cadastur),
				   	   'nm_outro_documento'	=>$this->nm_outro_documento,
    				   'ds_outro_documento'	=>$this->ds_outro_documento,
    				   'ds_site'			=>$filter->filter($this->ds_site),
    	               'id_atuacao'			=>$this->id_atuacao);
    	if ($this->id_juridica == null){
			$this->insert($dados);
			$this->id_juridica = $this->id_pessoa;
    	}
    	else {
    		$where = "id_juridica = " . $this->id_juridica;
			$this->update($dados, $where);
    	}
		return $this->id_juridica;
    }

	public function buscar($ds_empresa, $ds_cnpj, $ds_insc, $ds_cadastur, $id_cidade, $id_estado, $id_pais, $id_atuacao, $order, $asc){
    	$db = Zend_Registry::get('db');
	   	$sql = 'select pej.ds_nome ds_fantasia,
	   				   pj.ds_razao_social,
	   				   ds_pais,
    				   ds_estado,
	   				   ds_cidade,
	   				   pej.id_cidade,
    				   pj.id_juridica id,
    				   r.ds_atuacao
    			  from pessoa_juridica pj,
    			  	   pessoa		   pej,
    			  	   cidade		   c,
    			  	   estado		   e,
    			  	   pais			   p,
    			  	   ramo_atuacao	   r
    			 where pj.id_juridica	=pej.id_pessoa
    			   and pej.id_cidade	=c.id_cidade
    			   and c.id_estado		=e.id_estado
    			   and e.id_pais		=p.id_pais
    			   and pj.id_atuacao    =r.id_atuacao
    			   and pej.dt_exclusao is null';
		if ($id_atuacao!=null){
			$sql .=' and pj.id_atuacao='.$id_atuacao;
		}
    	if ($ds_empresa!=null){
    		$sql .=' and (pj.ds_razao_social like("%'.$ds_empresa.'%") or pej.ds_nome like ("%'.$ds_empresa.'%"))';
    	}
    	if ($ds_cnpj!=null && $ds_cadastur!=null){
    		$sql .=' and (pj.ds_cnpj like ("%'.$ds_cnpj.'%") or pj.ds_cadastur like("%'.$ds_cadastur.'%"))';
    	}else{
    		if ($ds_cnpj!=null){
    			$sql .=' and pj.ds_cnpj like ("%'.$ds_cnpj.'%")';
    		}
	    	if ($ds_cadastur!=null){
    			$sql .=' and pj.ds_cadastur like("%'.$ds_cadastur.'%")';
    		}
    	}    	
    	if ($id_cidade>0){
    		$sql.=' and pej.id_cidade='.$id_cidade;
    	}
    	if ($id_estado>0){
    		$sql .=' and e.id_estado='.$id_estado;
    	}
    	if ($id_pais>0){
			$sql .=' and p.id_pais='.$id_pais;
    	}
	    if ($ds_insc!=null){
    		$sql .=' and pj.ds_insc_estadual like("%'.$ds_insc.'%")';
    	}
		$orderBy = "asc";
		if($asc == 1){
			$orderBy = "desc";
		}
		$sql .= " order by " . $order . " ".$orderBy;
		$this->qtdReg = count($db->query($sql)->fetchAll());
		return $db->query($sql); 
    }

	private function consistir(){
		if ($this->cadastroConfiavel==true){
			$this->_name 	= 'pessoa_juridica';
		}else{
			$this->_name 	= 'aux_pessoa_juridica';
		}
		$this->_primary= array('id_juridica', 'id_pessoa');
	}

	public function excluir($id, $usuario=null){
    	$where = "id_juridica=".$id;
    	$this->id_juridica = $id;
    	try {
    		$this->delete($where);
    	} catch (Exception $e) {
    		if ($e->getCode()=='23000'){ // Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
    			$erro = 'Excluído logicamente.';
    			$this->loadFuncionarios();
    			$this->excluirFuncionarios($usuario);		
    		}
    	}
    	parent::excluir($id, $usuario);     	
	}

	private function excluirFuncionarios($usuario){
		if (count($this->funcionarios)==0){
			$this->loadFuncionarios();
		}
		$i=0;
		while ($i < count($this->funcionarios)){
			$this->funcionarios[$i]->excluir(null, $usuario);
			$i++;
		}
	}
	
	private function loadFuncionarios(){
		$db = Zend_Registry::get('db');
		$sql="select id_fisica id
                from fisica
               where dt_exclusao is null
                 and id_juridica={$this->id_juridica}";
		$result = $db->query($sql)->fetchAll();
		$this->funcionarios=null;
		$i = 0;
		foreach($result as $item){
			$objeto = new Fisica();
			$objeto->load($item["id"]);
			$this->funcionarios[$i] = $objeto;
			$i++;
		}
	}
	
	public function is_validate(){
		$mensagem = new AlertaErro();
		$erro=array('mensagem'  => null,
					'erro' 		=> false);
		//if ((is_null($ds_cnpj) && is_null($this->ds_cadastur) && is_null($this->ds_insc_estadual && (is_null($this->nm_outro_documento)==false))
		if ($this->ds_site=="" || $this->id_atuacao=="" || $this->ds_razao_social==""){
			$erro=$mensagem->getMessage(5); //Campos de preenchimento obrigatório. 	
		} else {
			$erro=parent::is_validate();	
		}
		return $erro;
	}
	
	public function validar(){
		$mensagem = new AlertaErro();
		$erro=array('mensagem'  => null,
					'erro' 		=> false);
		if ($this->ds_site=="" || $this->id_atuacao=="" || $this->ds_razao_social==""){
			$erro=$mensagem->getMessage(5); //Campos de preenchimento obrigatório. 	
			$this->erro_encontrado = true;
		} else {
			$erro=parent::is_validate();	
		}		
		$this->erro = $erro;
	}
	
	public function hasError(){
		return $this->erro_encontrado;
	}
}